package com.zhuoyue.system.mapper;

import com.zhuoyue.common.core.domain.CategoryNameAndNum;
import com.zhuoyue.common.core.domain.entity.TblProductBrand;
import com.zhuoyue.common.core.domain.entity.TblProductCategory;
import com.zhuoyue.common.core.domain.entity.TblProductClassify;
import com.zhuoyue.common.core.domain.entity.TblProductSeries;
import com.zhuoyue.system.domain.TblProductInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author zhanghui
 * @Date: 2021/08/04/9:09
 * @Description: 产品管理
 */
public interface SysProductManageMapper {
    /**
     * 查询品牌列表
     *
     * @param brand
     * @return
     */
//    @DataScope(deptAlias = "s_d")
    List<TblProductBrand> selectBrandList(TblProductBrand brand);


    TblProductBrand selectBrandById(Long id);

    /**
     * app查询品牌列表
     *
     * @param brand
     * @return
     */
    List<TblProductBrand> selectBrandListForApp(TblProductBrand brand);

    /**
     * 校验品牌名称是否唯一
     *
     * @param brandName
     * @return
     */
    int checkBrandNameUnique(String brandName);

    /**
     * 新增品牌
     *
     * @param brand
     * @return
     */
    int insertBrand(TblProductBrand brand);

    /**
     * 修改品牌信息
     *
     * @param brand
     * @return
     */
    int updateBrand(TblProductBrand brand);

    /**
     * 删除品牌信息
     *
     * @param brandIds
     * @return
     */
    int deleteBrandByIds(Long[] brandIds);

    /**
     * 查询产品分类列表
     *
     * @param classify
     * @return
     */
//    @DataScope(deptAlias = "t_d")
    List<TblProductClassify> selectClassifyList(TblProductClassify classify);


    /**
     * app查询产品分类列表
     *
     * @param classify
     * @return
     */
    List<TblProductClassify> selectClassifyListForApp(TblProductClassify classify);

    /**
     * 查询某个产品分类的子分类数量
     *
     * @param parentClassifyId
     * @return
     */
    int selectClassifyChildrenCountByParentId(Long parentClassifyId);

    /**
     * 根据ID查询产品分类
     *
     * @param classifyId
     * @return
     */
    TblProductClassify selectClassifyById(Long classifyId);

    /**
     * 添加产品分类
     *
     * @param classify
     * @return
     */
    int insertClassify(TblProductClassify classify);

    /**
     * 修改产品分类
     *
     * @param classify
     * @return
     */
    int updateClassify(TblProductClassify classify);

    /**
     * 删除产品分类
     *
     * @param classifyIds
     * @return
     */
    int deleteClassify(Long[] classifyIds);

    /**
     * 根据产品分类ID获取其子节点
     *
     * @param classifyId
     * @return
     */
    List<TblProductClassify> selectChildrenClassifyById(Long classifyId);

    /**
     * 批量更新产品分类
     *
     * @param classifyList
     * @return
     */
    int updateClassifyAncestorsList(@Param("classifyList") List<TblProductClassify> classifyList);


    /**
     * 查询产品系列列表
     *
     * @param series
     * @return
     */
//    @DataScope(deptAlias = "t_d")
    List<TblProductSeries> selectSeriesList(TblProductSeries series);


    /**
     * app查询产品系列列表
     *
     * @param series
     * @return
     */
    List<TblProductSeries> selectSeriesListForApp(TblProductSeries series);


    TblProductSeries selectSeriesById(Long seriesId);

    /**
     * 根据分类ID查询系列
     *
     * @param classifyId
     * @return
     */
    List<TblProductSeries> selectSeriesListByClassifyId(Long classifyId);

    /**
     * 添加产品分类
     *
     * @param series
     * @return
     */
    int insertSeries(TblProductSeries series);


    /**
     * 修改产品分类
     *
     * @param series
     * @return
     */
    int updateSeries(TblProductSeries series);


    /**
     * 删除产品分类
     *
     * @param seriesIds
     * @return
     */
    int deleteSeries(Long[] seriesIds);

    /**
     * 查询某个产品分类下产品系列的数量
     *
     * @param classifyId
     * @return
     */
    int getSeriesCountByClassifyId(Long classifyId);

    /**
     * 截断表
     *
     * @param tableName
     * @return
     */
    int truncateTables(@Param("tableName") String tableName);

    /**
     * 赋值表
     *
     * @param sourceTableName
     * @param targetTableName
     * @return
     */
    int copyTablesData(@Param("sourceTableName") String sourceTableName, @Param("targetTableName") String targetTableName);


    /**
     * 更新产品信息表中的product_type属性, 如"0FAA0202".(仅在产品发布时使用, 复制数据到新表中方便查询)
     *
     * @return
     */
    int updateProductType();

    String getCategoryNameByNum(@Param("categoryNum") String categoryName);

    int getProductInfoCount(@Param("orgCode") String orgCode);

    List<CategoryNameAndNum> listCategoryNameAndNum();


    /**
     * 需要插入的device_zy_category表的category_id
     *
     * @return
     */
    List<Long> getNeedInsertDeviceCategoryId();

    /**
     * 需要插入的product_brand表的ID
     *
     * @return
     */
    List<Long> getNeedInsertProductBrandId();

    /**
     * 需要插入的product_classify表的ID
     *
     * @return
     */
    List<Long> getNeedInsertProductClassifyId();

    /**
     * 需要插入的product_series表的ID
     *
     * @return
     */
    List<Long> getNeedInsertProductSeriesId();

    /**
     * 需要插入的product_info表的ID
     *
     * @return
     */
    List<String> getNeedInsertProductInfoId();


    /**
     * 新增device_zy_category表中的数据
     *
     * @param ids
     * @return
     */
    int insertDeviceProductApp(List<Long> ids);

    /**
     * 新增product_brand_app表中的数据
     *
     * @param ids
     * @return
     */
    int insertProductBrandApp(List<Long> ids);

    /**
     * 新增product_classify_app表中的数据
     *
     * @param ids
     * @return
     */
    int insertProductClassifyApp(List<Long> ids);

    /**
     * 新增product_series_app表中的数据
     *
     * @param ids
     * @return
     */
    int insertProductSeriesApp(List<Long> ids);

    /**
     * 新增product_info_app表中的数据
     *
     * @param ids
     * @return
     */
    int insertProductInfoApp(List<String> ids);


    /**
     * 需要更新的device_zy_category表的category_id
     *
     * @return
     */
    List<Long> getNeedUpdateDeviceCategoryId();

    /**
     * 需要更新的product_brand表的ID
     *
     * @return
     */
    List<Long> getNeedUpdateProductBrandId();

    /**
     * 需要更新的product_classify表的ID
     *
     * @return
     */
    List<Long> getNeedUpdateProductClassifyId();

    /**
     * 需要更新的product_series表的ID
     *
     * @return
     */
    List<Long> getNeedUpdateProductSeriesId();

    /**
     * 需要更新的product_info表的ID
     *
     * @return
     */
    List<String> getNeedUpdateProductInfoId();


    /**
     * 按id集合查询device_zy_category列表
     *
     * @param ids
     * @return
     */
    List<TblProductCategory> getDeviceCategoryByIds(List<Long> ids);

    /**
     * 按id集合查询product_brand_app列表
     *
     * @param ids
     * @return
     */
    List<TblProductBrand> getProductBrandByIds(List<Long> ids);

    /**
     * 按id集合查询product_classify_app列表
     *
     * @param ids
     * @return
     */
    List<TblProductClassify> getProductClassifyByIds(List<Long> ids);

    /**
     * 按id集合查询product_series_app列表
     *
     * @param ids
     * @return
     */
    List<TblProductSeries> getProductSeriesByIds(List<Long> ids);

    /**
     * 按id集合查询product_info列表
     *
     * @param ids
     * @return
     */
    List<TblProductInfo> getProductInfoByIds(List<String> ids);


    /**
     * 修改device_zy_category表中的数据
     *
     * @param productCategoryList
     * @return
     */
//    int updateDeviceProductApp(List<TblProductCategory> productCategoryList);

    /**
     * 修改product_brand_app表中的数据
     *
     * @param productBrandList
     * @return
     */
    int updateProductBrandApp(List<TblProductBrand> productBrandList);

    /**
     * 修改product_classify_app表中的数据
     *
     * @param productClassifyList
     * @return
     */
    int updateProductClassifyApp(List<TblProductClassify> productClassifyList);

    /**
     * 修改product_series_app表中的数据
     *
     * @param productSeriesList
     * @return
     */
    int updateProductSeriesApp(List<TblProductSeries> productSeriesList);

    /**
     * 修改product_info_app表中的数据
     *
     * @param productInfoList
     * @return
     */
    int updateProductInfoApp(List<TblProductInfo> productInfoList);
}
